package com.ydgg.ltar.service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ydgg.ltar.mapper.AdminMapper;
import com.ydgg.ltar.mapper.AdminUserRolesMapper;
import com.ydgg.ltar.model.Admin;
import com.ydgg.ltar.model.AdminUserRoles;
import com.ydgg.ltar.util.PageInfo;


/**
 * @author 作者 : 张叶
 * @date 创建时间：2016年7月8日 下午2:52:32
 * @version 1.0
 * @see 管理员
 */
@Service("adminService")
public class AdminService {
	
	@Autowired
	private AdminMapper adminMapper;//管理员
	@Autowired
	private AdminUserRolesMapper adminUserRolesMapper;// 用户角色关系


	public Admin loginAdmin(String username) {
		List<Admin> list = adminMapper.loginAdmin(username);
		if(list.size() > 0){
			return list.get(0);
		}else{
			return null;
		}
	}
	
	/**
	 * 管理员列表，分页
	 * @author 张叶
	 * @version 创建时间：2016年7月9日 下午4:04:35
	 */
	public List<Map<String,Object>> selectByPage(PageInfo pageInfo, String where, String order) {
		Map<String, Object> param = new HashMap<String, Object>();
		param.put("myCount", pageInfo.getCount());
		param.put("pageSize", pageInfo.getPageSize());
		param.put("page", pageInfo.getPage());
		param.put("where", where);
		param.put("order", order);
		List<Map<String, Object>> m = adminMapper.selectByPage(param);
		pageInfo.setCount(Integer.parseInt(param.get("myCount").toString()));
		return m;
	}
	
	
	/**
	 * 按主键查找记录
	 * @author 张叶
	 * @version 创建时间：2016年7月9日 下午4:51:54
	 */
	public Admin selectByaId(Long aId){
		Admin a = adminMapper.selectByPrimaryKey(aId);
		return a;
	}
	
	
	/**
	 * 按主键删除
	 * @author 张叶
	 * @version 创建时间：2016年7月9日 下午5:40:25
	 */
	public int delAdmin(Long aId){
		int i = adminMapper.deleteByPrimaryKey(aId);
		return i;
	}
	
	
	/**
	 * 按主键删除管理员同时删除aur中的记录
	 * @author 左晓锋
	 * @version 创建时间：2016年9月27日 下午15:53:25
	 */
	@Transactional
	public int delAdminAndAur(Long aId){
		int i = adminMapper.deleteByPrimaryKey(aId);
		AdminUserRoles aur = adminUserRolesMapper.findByAdminId(aId);
		if(aur != null){
			i += adminUserRolesMapper.deleteByadminId(aur.getAurId());
		}
		return i;
	}
	
	
	
	/**
	 * 添加管理员同时添加aur
	 * 作者： 张叶
	 * 创建时间：2018年5月31日  上午10:27:10
	 */
	@Transactional
	public int insertAdminAndAur(Admin a){
		a.setCreatedAt(new Date());
		int i = adminMapper.insert(a);
		//通过账号查询是否添加管理员成功
		List<Admin> list = adminMapper.loginAdmin(a.getUsername());
		if(list.size() > 0){
			Admin admin = list.get(0);
			//添加管理员成功就相应的添加aur
			if(admin.getRoleid() != null && !"".equals(admin.getRoleid())){
				AdminUserRoles aur = adminUserRolesMapper.findByAdminId(admin.getId());
				//角色
				if(aur != null){
					i += adminUserRolesMapper.deleteByadminId(aur.getAurId());
				}
				aur = new AdminUserRoles();
				aur.setAurAdminid(admin.getId());
				aur.setAurRolesid(admin.getRoleid().longValue());
				i += adminUserRolesMapper.insert(aur);
			}
		}
		return i;
	}
	
	/**
	 * 按条件查询，返回实体
	 * @author 张叶
	 * @version 创建时间：2016年7月11日 下午4:40:00
	 */
	public List<Admin> selectWhere(String where){
		List<Admin> list = adminMapper.selectByWhere(where);
		return list;
	}
	public List<Admin> selectAll(){
		List<Admin> list = adminMapper.selectAll();
		return list;
	}
	

	/**
	 * 获取当前登录管理员信息
	 * 作者： 张叶
	 * 创建时间：2018年5月31日  上午10:26:51
	 */
	public Admin getCurrent() {
		Subject currentUser = SecurityUtils.getSubject();
		Admin ad = (Admin) currentUser.getSession().getAttribute("currentUser");// 登录会员
		return ad;
	}

	
	/**
	 * 修改记录
	 * 作者：张叶
	 * 时间：2016年9月6日 下午5:51:51
	 */
	@Transactional
	public int updateAdmin(Admin a,int flag){
		try{
			int i = adminMapper.updateByPrimaryKey(a);
			if(flag == 1){//修改角色，在admin_user_roles查找记录，并修改，根据用户ID查找，如果有记录，则修改，没有，则添加
				AdminUserRoles aur = adminUserRolesMapper.findByAdminId(a.getId());
				if(aur != null){
					i += adminUserRolesMapper.deleteByadminId(aur.getAurId());
					aur = new AdminUserRoles();
					aur.setAurAdminid(a.getId());
					aur.setAurRolesid(a.getRoleid().longValue());
					i += adminUserRolesMapper.insert(aur);
				}else{
					aur = new AdminUserRoles();
					aur.setAurAdminid(a.getId());
					aur.setAurRolesid(a.getRoleid().longValue());
					i += adminUserRolesMapper.insert(aur);
				}
			}
			return i;
		}catch(Exception e){
			return -1;
		}
	}
}
 